part of '../widgets.dart';

enum VanToastType { text, loading, success, fail, html }

enum VanToastPosition { middle, top, bottom }

enum VanToastWordBreak { breakAll, normal, breakWord }

enum VanToastLoadingType { circular, spinner }

/// 调用 showToast 等方法时，支持传入以下选项：
class VanToastOptions {
  /// VanToastType - 提示类型，可选值为 loading success fail html(默认: text)
  final VanToastType type;

  /// props - 位置，可选值为 top bottom(默认: middle)
  final VanToastPosition position;

  /// props - 文本内容，支持通过\n换行(默认: '')
  final String message;

  /// props - 文本内容的换行方式，可选值为 normal break-all break-word(默认: 'break-all')
  final VanToastWordBreak wordBreak;

  /// props - 自定义图标，支持传入图标名称或图片链接，等同于 Icon 组件的 name 属性
  final String? icon;

  /// props - 图标大小，如 20px 2em，默认单位为 px(默认: 36px)
  final String iconSize;

  /// props - 图标类名前缀，等同于 Icon 组件的 class-prefix 属性(默认: van-icon)
  final String iconPrefix;

  /// props - 是否显示背景遮罩层(默认: false)
  final bool overlay;

  /// props - 是否禁止背景点击(默认: false)
  final bool forbidClick;

  /// props - 是否在点击后关闭(默认: false)
  final bool closeOnClick;

  /// props - 是否在点击遮罩层后关闭(默认: false)
  final bool closeOnClickOverlay;

  /// props - 加载图标类型, 可选值为 spinner(默认: circular)
  final VanToastLoadingType loadingType;

  /// props - 展示时长(ms)，值为 0 时，toast 不会消失(默认: 2000)
  final double duration;

  /// props - 自定义类名
  final String? className;

  /// props - 自定义遮罩层类名
  final String? overlayClass;

  /// props - 自定义遮罩层样式
  final String? overlayStyle;

  /// props - 完全展示后的回调函数
  final String? onOpened;

  /// props - 关闭时的回调函数
  final String? onClose;

  /// props - 动画类名，等价于 transition 的name属性(默认: van-fade)
  final String transition;

  /// props - 指定挂载的节点，等同于 Teleport 组件的 to 属性(默认: body)
  final String teleport;

  VanToastOptions({
    this.type = VanToastType.text,
    this.position = VanToastPosition.middle,
    this.message = "",
    this.wordBreak = VanToastWordBreak.breakAll,
    this.icon,
    this.iconSize = "36px",
    this.iconPrefix = "van-icon",
    this.overlay = false,
    this.forbidClick = false,
    this.closeOnClick = false,
    this.closeOnClickOverlay = false,
    this.loadingType = VanToastLoadingType.circular,
    this.duration = 2000,
    this.className,
    this.overlayClass,
    this.overlayStyle,
    this.onOpened,
    this.onClose,
    this.transition = "van-fade",
    this.teleport = "body",
  });
}

class VanToast {}

/// 展示文字提示
VanToast showToast() {
  return VanToast();
}

/// 展示加载提示
VanToast showLoadingToast(dynamic opt) {
  assert(opt != null && (opt is String || opt is VanToastOptions));
  return VanToast();
}

/// 展示成功提示
VanToast showSuccessToast(dynamic opt) {
  assert(opt != null && (opt is String || opt is VanToastOptions));
  return VanToast();
}

/// 展示失败提示
VanToast showFailToast(dynamic opt) {
  assert(opt != null && (opt is String || opt is VanToastOptions));
  return VanToast();
}

/// 关闭当前展示的提示
void closeToast({bool? closeAll}) {}

/// 允许同时存在多个 Toast
void allowMultipleToast() {}

/// 修改默认配置，影响所有的 showToast 调用。传入 type 可以修改指定类型 Toast 的默认配置
void setToastDefaultOptions() {}

/// 重置默认配置，影响所有的 showToast 调用。传入 type 可以重置指定类型 Toast 的默认配置
void resetToastDefaultOptions() {}
